package client_server;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Client {

    private static final String SERVER_ADDRESS = "localhost";
    private static final int SERVER_PORT = 6677;
    private static final String[] EXIT_COMMANDS = {"886", "over"};

    /**
     * 程序的入口点。
     * @param args 命令行参数（未使用）
     */
    public static void main(String[] args) {
        Client client = new Client();
        try {
            client.fun();
        } catch (IOException e) {
            // 优化异常处理
            e.printStackTrace(); // 或者使用日志框架记录错误
        }
    }

    /**
     * 与服务器建立连接，并发送用户输入的消息，直到接收到特定退出命令。
     * @throws IOException 如果发生I/O错误
     */
    private void fun() throws IOException {
        // 创建用于从标准输入读取数据的Scanner对象
        Scanner sc = new Scanner(System.in);
        while (true) {
            // 使用try-with-resources确保资源自动关闭
            try (Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
                 OutputStream out = socket.getOutputStream()) {

                // 读取用户输入，并将输入的内容发送给服务器
                String input = sc.nextLine();
                if (isExitCommand(input)) {
                    // 当接收到特定退出命令时，退出循环
                    break;
                }
                out.write(input.getBytes());
            } catch (IOException e) {
                // 更细致的异常处理
                System.err.println("连接到服务器失败: " + e.getMessage());
                continue; // 根据需要可以选择重新尝试连接
            }
        }
    }

    /**
     * 检查输入字符串是否为退出命令。
     * @param input 用户输入
     * @return 如果输入是退出命令，则返回true，否则返回false。
     */
    private boolean isExitCommand(String input) {
        for (String command : EXIT_COMMANDS) {
            if (command.equals(input)) {
                return true;
            }
        }
        return false;
    }
}

